/* common.h COPYRIGHT KIC LIMITED 2011 
 *
 * Date         Corp.   Name           Note
 * ---------- ------- ------------ -------------------
 * 2011.10.25 KIC      J.TANAKA      First Modification
 */

#define BUFFSIZE 512
#define PAGECOUNT 64
#define WORDFIELDLENGTH 15
#define SPACEFIELDLENGTH 2
#define PAGEFIELDLENGTH 63

/* エラーメッセージ*/
#define ERR_00001 "Continue to process.\n "
#define ERR_00002 "Continue to process.\n "
#define ERR_00004 "Illegal Character Code(0xNN) is ignored.\n"
#define ERR_00012 "Input data comes from Standard Input.\n "
#define ERR_00013 "Output data is written to Standard Output.\n "
#define ERR_00100 "Detected Illegal Character Code(0xNN).\n "
#define ERR_01000 "Can not open Inputfile"
#define ERR_01001 "Can not open Outputfile"
#define ERR_01010 "Catching Signal"
#define ERR_01011 "Memory Allocation Failed.\n"

typedef struct plist{
	struct plist *nextp; /* 次の掲載ページへのポインタ */
	int pnum;            /* ページ番号 */
}plist_t;

typedef struct wlist{
	struct wlist *up;    /* 親ノードへのポインタ */
	struct wlist *leftp; /* 左子ノードへのポインタ */
	struct wlist *rightp;/* 右子ノードへのポインタ */
	char *wordp;         /* 単語へのポインタ */
	plist_t *top;        /* 最初の掲載ページへのポインタ */
	plist_t *lastp;      /* 最初の掲載ページへのポインタ  */
}wlist_t;

typedef struct option{
	char input_file[100]; /* input_file */
	char output_file[100];/* output_file */
	char config_file[100];/* input_file */
}option_t;

extern wlist_t *wtop; /* 単語リストへのポインタ */
extern char firstletter[BUFFSIZE]; /* 最初の一文字 */

/* Function declarations */
int register_word(int npage, char *wordp);
plist_t * allocp(void);
wlist_t * allocw(void);
void freep(wlist_t *wlp);
void freew(plist_t *plp);
void display(wlist_t *wlp);
void print_firstletter(char ch);
void print_word(wlist_t *wlp);
void print_plist(plist_t *plp);
option_t * register_option(int argc, char *argv[]);
char *tolower_str(char *wordp);
void padding_space(int num);

